import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;

public class LC12 {
    // 使用HashTable
    // 遍历的效率太低；使用hashTable就不需要遍历了
    // TODO 到底是hashTable 还是hashMap ???
    public int[] twoSum(int[] nums, int target) {
        // 先把数组放入map
        Map<Integer,Integer> map=new HashMap<>();   // TODO 这里为什么要用hashmap？hashtable行不行？
        for(int i=0;i<nums.length;i++){
            map.put(nums[i],i);
        }

        //
        for(int i=0;i<nums.length;i++){
            int sub=target-nums[i]; // 用target值减去一个元素。查找另外一个元素
            if(map.containsKey(sub) && map.get(sub)!=i){    // .get()方法返回的是元素的下标；就是说，找到的元素不能是上面相减的元素
                return new int[]{i,map.get(sub)};   // 注意：返回的是元素的下标
            }
        } throw new IllegalArgumentException("No two sum solution");
          // TODO 不过这里为什么抛出异常呢？ 抛出异常就不需要return？
            // 不抛出异常，就要约定错误代码，再给调用的地方去解析，输出错误提升；太麻烦了。
    }

    public static void main(String[] args) {
        int[] a = {1,2,4,8,7,9};
        int target = 30;
        LC12 test = new LC12();
        int[] b = test.twoSum(a, target);
        for (int i: b){
            System.out.println(i);
        }

    }
}
